package com.txby.test;

import java.net.URI;
import java.util.HashMap;
import java.util.Map;

import org.springframework.http.ResponseEntity;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

/**
 * RestTemplate 客户端请求工具
* @ClassName: RestClientUtil 
* @Description: TODO(这里用一句话描述这个类的作用) 
* @author jacking
* @date 2017年11月22日 下午12:40:38 
*
 */
public class RestClientUtil {
	public static RestTemplate restTemplate = new RestTemplate();
	/**
	 * 请求数据
	* @Title: restHttpSourceData 
	* @Description: TODO(这里用一句话描述这个方法的作用) 
	* @param @return    设定文件 
	* @return String    返回类型 
	* @throws
	 */
	private static Object  getRestData(String requesturl,Class clz){
        
		ResponseEntity<String> result=restTemplate.getForEntity(requesturl, String.class); 
		String responseContent=result.getBody();
		 if(clz!=null&&(clz.getName().equals(Map.class.getName())||clz.getName().equals(HashMap.class.getName()))||clz.getName().equals(JSONObject.class.getName())){
			 return JSON.parseObject(responseContent);
		 }else{
			 return responseContent;
		 }
        
	}
	private static Object  getRestData(String requesturl,Class clz,Map uriVariables){
		String  result=restTemplate.getForObject(requesturl, String.class, uriVariables);
		if(clz!=null&&(clz.getName().equals(Map.class.getName())||clz.getName().equals(HashMap.class.getName()))||clz.getName().equals(JSONObject.class.getName())){
			return JSON.parseObject(result);
		}else{
			return result;
		}
		
	}
	private static Object  getRestData(String requesturl,Class clz,Object... uriVariables){
		String  result=restTemplate.getForObject(requesturl, String.class, uriVariables);
		if(clz!=null&&(clz.getName().equals(Map.class.getName())||clz.getName().equals(HashMap.class.getName()))||clz.getName().equals(JSONObject.class.getName())){
			return JSON.parseObject(result);
		}else{
			return result;
		}
		
	}
	 
	
 /**
  * 查询返回实体
 * @Title: getRestDataByEntity 
 * @Description: TODO(这里用一句话描述这个方法的作用) 
 * @param @param requesturl
 * @param @param entityClz
 * @param @return    设定文件 
 * @return Object    返回类型 
 * @throws
  */
	private static Object  getRestDataByEntity(String requesturl,Class entityClz){
        Object o = restTemplate.getForObject(requesturl, entityClz);
        return o;
	}
	
	/**
	 * 
	* @Title: postRestDataSave 
	* @Description: TODO(这里用一句话描述这个方法的作用) 
	* @param @param requesturl
	* @param @param entityData
	* @param @param entityClz
	* @param @return    设定文件 
	* @return String    返回类型 
	* @throws
	 */
    private static String postRestDataSave(String requesturl,Object entityData,Class entityClz) {
        URI uri = restTemplate.postForLocation(requesturl, entityData, entityClz);
        return  uri.toASCIIString();
    }
    private static String postRestDataSave(String requesturl,Object entityData,Class entityClz,Map uriVariables) {
//        return restTemplate.postForObject(requesturl + "add.do?user={user}", null, entityClz, uriVariables);
        return restTemplate.postForObject(requesturl, null, String.class, uriVariables);
    }
    private static String postRestDataSave(String requesturl,Object... uriVariables) {
    	return restTemplate.postForObject(requesturl, null, String.class, uriVariables);
    }

  /**
   * 
  * @Title: putRestDataUpdate 
  * @Description: TODO(这里用一句话描述这个方法的作用) 
  * @param @param requesturl
  * @param @param entityData
  * @param @return    设定文件 
  * @return boolean    返回类型 
  * @throws
   */
    private static boolean  putRestDataUpdate(String requesturl,Object entityData) {
          try {
			restTemplate.put(requesturl, entityData);
		} catch (RestClientException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			 return  false;
		}
         return  true;
    }
    private static boolean  putRestDataUpdate(String requesturl,Map uriVariables) {
    	try {
    		restTemplate.put(requesturl, null, uriVariables);
    	} catch (RestClientException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    		return  false;
    	}
    	return  true;
    }

    /**
     * 
    * @Title: deleteUser 
    * @Description: TODO(这里用一句话描述这个方法的作用) 
    * @param     设定文件 
    * @return void    返回类型 
    * @throws
     */
    private static boolean deleteRestDataDelete(String requesturl,Map uriVariables) {
        try {
			restTemplate.delete(requesturl, uriVariables);
		} catch (RestClientException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			 return  false;
			}
	      return  true;
    }
    private static boolean deleteRestDataDelete(String requesturl) {
    	try {
    		restTemplate.delete(requesturl);
    	} catch (RestClientException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    		return  false;
    	}
    	return  true;
    }
    
    public static void main(String[] args) {
		String requesturl="http://localhost:8090/rest/show";
		
		
	}
 
}